package com.breaking.second.activity;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewbinding.ViewBinding;

import com.breaking.second.application.EscortApplication;
import com.breaking.second.entity.PageableVo;
import com.breaking.second.entity.UserLoginEntity;
import com.breaking.second.utils.StatusBarUtil;
import com.breaking.second.utils.ViewBindingUtil;

public class BaseActivity<t extends ViewBinding> extends AppCompatActivity {
    public final PageableVo pageableVo = new PageableVo();
    public t binding;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        UserLoginEntity userLoginEntity = EscortApplication.getUserLoginEntity();
        if (userLoginEntity != null) {
            pageableVo.setUserId(userLoginEntity.getId());
        }
        binding = ViewBindingUtil.inflate(getClass(), getLayoutInflater());
        if (binding == null) {
            throw new RuntimeException(getClass().getName() + ":布局转换失败");
        }
        setContentView(binding.getRoot());
        StatusBarUtil.setAppearanceLightStatusBars(getWindow(), true);
        initToolbar();
    }

    /**
     * 初始化标题栏返回
     */
    private void initToolbar() {
        Toolbar toolbar = findToolbar(binding.getRoot());
        if (toolbar == null) return;
        toolbar.setNavigationOnClickListener(this::finish);
    }

    private void finish(View view) {
        finish();
    }

    /**
     * 递归遍历 View 树查找 Toolbar
     *
     * @param view 要查找的 View
     * @return 查找到的 Toolbar，如果没有找到则返回 null
     */
    private Toolbar findToolbar(View view) {
        // 如果传入的 View 为空，则直接返回 null
        if (view == null) {
            return null;
        }
        // 如果传入的 View 是 Toolbar，则直接返回
        if (view instanceof Toolbar) {
            return (Toolbar) view;
        }
        // 如果传入的 View 是 ViewGroup，则遍历它的子 View
        if (view instanceof ViewGroup viewGroup) {
            int childCount = viewGroup.getChildCount();
            for (int i = 0; i < childCount; i++) {
                View childView = viewGroup.getChildAt(i);
                Toolbar toolbar = findToolbar(childView); // 递归查找子 View
                if (toolbar != null) {
                    return toolbar; // 如果找到了 Toolbar，直接返回
                }
            }
        }
        // 如果遍历完所有子 View 都没有找到 Toolbar，则返回 null
        return null;
    }
}
